/* 795. 区间子数组个数 */
/**
 * @param {number[]} nums
 * @param {number} left
 * @param {number} right
 * @return {number}
 */

/* 
    一次遍历
    我们可以将数组中的元素分为3类：
    < left 0 
    >= left && <= right 1
    > right 2

    那么本题就可以转换为求解 不包含2 且至少包含有一个1的子数组数目
*/
var numSubarrayBoundedMax = function (nums, left, right) {
	let res = 0,
		last2 = -1, //上一次2出现的位置 不存在为-1
		last1 = -1 // 上一次1出现的位置 不存在为-1
	for (let i = 0; i < nums.length; i++) {
		if (nums[i] >= left && nums[i] <= right) {
			last1 = i
		} else if (nums[i] > right) {
			last2 = i
			last1 = -1
		}
		if (last1 != -1) {
			res += last1 - last2
		}
	}
	return res
}
numSubarrayBoundedMax([2, 1, 4, 3], 2, 3)
